/**
 * merge level=10
 * 
 * 一个查询结果的 grid 类
 */
Ext.define('Jfok.report.resultgrid.ResultListGrid', {
	extend : 'Ext.grid.Panel',
	alias : 'widget.resultlistgrid',

	requires : ['Jfok.report.resultgrid.ResultListGridToolbar',
			'Jfok.module.widget.PageSizeCombo'],

	config : {
		// selectFieldsWindow中的当前选中的tree中的数据，
		// 可以是后台加载来的，也可以是window保存的，尚未提交到后台保存的
		selectdGroupAndFields : null,
		columnAutoFited : false,
		isGrouped : false
		// 是否有分组
		// 列宽是否已经自动适应过了，一个方案适应一次，渲染太慢
	},
	viewConfig : {
		stripeRows : true
	},
	columnLines : true,
	border : false,
	frame : false,
	enableLocking : true,
	bodyCls : 'panel-background',
	multiSelect : true,
	selType : 'rowmodel',// 'checkboxmodel','SINGLE'

	// applySelectdGroupAndFields : function(source) {
	//
	// this.reconfigure(store, columns);
	// this.store.reload();
	// return source;
	// },

	features : [{
				ftype : 'filters',
				// encode and local configuration options defined previously for easier
				// reuse
				encode : true
			}],

	viewConfig : {

		getRowClass : function(record, index) {
			var c = record.get('_level_');
			if (c == 10) {
				return 'total';
			} else if (c >= 20 && c <= 30) {
				return 'subtotal' + c;
			}
		}
	},

	initComponent : function() {
		var me = this;
		this.setColumnAutoFited(false);
		this.columns = [{
					xtype : 'rownumberer',
					tdCls : 'x-report-cell',
					resizeDisabled : true ,
					width : 30
				}];

		// 是否有附件，有附件则加入附件按钮
		if (this.module.tf_hasAddition && this.module.tf_userRole.tf_additionBrowse)
			this.columns.push({
						locked : true,
						resizeDisabled : true,
						tdCls : 'x-report-cell',
						xtype : 'attachmentnumbercolumn',
						width : Ext.themeName === 'neptune' ? 36 : 28
					});
		// 是否模块具有审核功能
		if (this.module.tf_hasAuditing) {
			this.columns.push({
						resizeDisabled : true,
						locked : true,
						tdCls : 'x-report-cell',
						xtype : 'auditingactioncolumn',
						width : Ext.themeName === 'neptune' ? 36 : 28
					});
		}
		// 是否模块具有审批功能
		if (this.module.tf_hasApprove) {
			this.columns.push({
						locked : true,
						tdCls : 'x-report-cell',
						resizeDisabled : true,
						xtype : 'approveactioncolumn',
						width : Ext.themeName === 'neptune' ? 36 : 28
					});
		}

		// 是否模块具有支付功能
		if (this.module.tf_hasPayment) {
			this.columns.push({
						locked : true,
						tdCls : 'x-report-cell',
						xtype : 'payoutactioncolumn',
						width : Ext.themeName === 'neptune' ? 36 : 28
					});
		}

		if (me.mainReport.getGroupFields().length >= 1) {
			this.isGrouped = true;
			me.columns.push({
						text : '分组项目',
						dataIndex : '_total_',
						tdCls : 'x-report-cell intcolor',
						locked : true
					});
			me.columns.push({
						locked : true,
						text : '记录数',
						dataIndex : '_count_',
						align : 'center',
						xtype : 'numbercolumn',
						format : '#',
						tdCls : 'x-report-cell intcolor',
						renderer : Jfok.system.intRenderer
					});
		}
		Ext.Array.forEach(this.groupAndFields, function(fgroup) {
					var group = {
						text : fgroup.groupTitle,
						flex : 1,
						columns : [],
						hidden : fgroup.groupTitle == '隐藏' ,
						locked : fgroup.groupTitle.endWith(' ')
					};
					Ext.Array.forEach(fgroup.fields, function(field) {
								var column = me.getColumnField(field);
								field.dataIndex = column.dataIndex;
								field.text = column.simpleText || column.text;
								// 每个字段可以加筛选的内容
								// column.text += "<br/>" + column.dataIndex;
								group.columns.push(column)
							});
					me.columns.push(group);
				});

		this.store = Ext.create('Jfok.report.resultgrid.ResultListGridStore', {
					grid : this,
					module : this.module,
					groupAndFields : this.groupAndFields
				});

		this.dockedItems = [{
					dock : 'top',
					xtype : 'resultlistgridtoolbar',
					mainReport : this.mainReport,
					resultGrid : this
				}];

		if (!this.mainReport.getIsLiveGrid())
			this.dockedItems.push({
						xtype : 'pagingtoolbar',
						prependButtons : true,
						items : [{
									xtype : 'pagesizecombo',
									value : this.store.pageSize
								}, '条', '-'],
						store : this.store,
						dock : 'bottom',
						displayInfo : true
					});

		this.callParent(arguments);
	},

	columnsAutoSize : function() {
		if (!this.getColumnAutoFited()) {
			this.setColumnAutoFited(true);
			Ext.suspendLayouts();

			Ext.Array.forEach(this.lockedGrid.getView().headerCt.items.items,
					function(group) {
						if (!group.resizeDisabled)
							group.autoSize();
					})
			Ext.Array.forEach(this.normalGrid.getView().headerCt.items.items,
					function(group) {
						group.autoSize();
					})
			Ext.resumeLayouts(true);

		}
	},

	getColumnField : function(gfd) {
		var me = this;
		var fieldModule = Jfok.modules.getModule(gfd.moduleName);

		var fd = fieldModule.getFieldDefine(gfd.fieldId);

		var field = {
			maxWidth : 800,
			text : fd.tf_title,
			sortable : true,
			renderer : Jfok.system.defaultRenderer,
			dataIndex : (fd.baseField || fd.tf_aggregate)
					? fd.tf_fieldName
					: fd.manytoone_TitleName,
			tdCls : 'x-report-cell'
		};

		if (fieldModule.tf_moduleName != this.module.tf_moduleName) {
			field.dataIndex = (fd.baseField || fd.tf_aggregate)
					? fieldModule.tableAsName + '___' + fd.tf_fieldName
					: fd.manytoone_TitleName
		};

		switch (fd.tf_fieldType) {
			case 'Date' :
				Ext.apply(field, {
							xtype : 'datecolumn',
							align : 'center',
							width : 100,
							renderer : Jfok.system.dateRenderer
						});
				break;

			case 'Datetime' :
				Ext.apply(field, {
							xtype : 'datecolumn',
							align : 'center',
							width : 130,
							renderer : Jfok.system.datetimeRenderer
						});
				break;

			case 'Boolean' :
				delete field.renderer;
				field.xtype = 'checkcolumn';
				field.stopSelection = false;
				field.processEvent = function(type) {
					if (type == 'click')
						return false;
				};
				break;
			case 'Integer' :
				Ext.apply(field, {
							align : 'center',
							xtype : 'numbercolumn',
							format : '#',
							tdCls : 'x-report-cell intcolor',
							renderer : Jfok.system.intRenderer
						});
				break;
			case 'Double' :
				Ext.apply(field, {
							align : 'center',
							xtype : 'numbercolumn',
							width : 110,
							minWidth : 80,
							renderer : Jfok.system.moneyRenderer
						});
				break;
			case 'Float' :
				Ext.apply(field, {
							align : 'center',
							xtype : 'numbercolumn',
							width : 110,
							minWidth : 80,
							renderer : Jfok.system.moneyRenderer
						});
				break;
			case 'Percent' :
				Ext.apply(field, {
							align : 'center',
							xtype : 'numbercolumn',
							width : 110,
							minWidth : 80,
							renderer : Jfok.system.percentRenderer
						})
				break;
			case 'String' :
				if (!gfd.aggregateType) {
					if (fieldModule.tf_nameFields == fd.tf_fieldName)
						if (fieldModule.tf_moduleName == this.module.tf_moduleName)
							// 如果是基准字段的 nameField,加一个下划线的链接
							Ext.apply(field, {
										simpleText : fd.tf_title,
										text : '<span class="gridheadicon" >'
												+ '<img src="images/button/namefield.png" />'
												+ fd.tf_title + '</span>',
										renderer : this.nameFieldRenderer
									});
						else {
							// 如果是其他模块的nameFields 字段
							var icon = '';
							if (fieldModule && fieldModule.iconURL)
								icon = '<img src="' + fieldModule.iconURL + '" />';
							Ext.apply(field, {
										renderer : Jfok.system.manytoOneFieldRenderer,
										simpleText : fd.tf_title,
										text : '<span class="gridheadicon" >' + icon + fd.tf_title
												+ '</span>',
										manytooneIdName : fieldModule.tableAsName + '___'
												+ fieldModule.tf_primaryKey,
										moduleName : fieldModule.tf_moduleName
									})
						}
				}
		}

		if (gfd.aggregateType == 'sum') {
			field.dataIndex = 'S_' + field.dataIndex;
			field.text += '小计';
		} else if (gfd.aggregateType == 'count') {
			field.dataIndex = 'C_' + field.dataIndex;
			field.text += '个数';
			field.tdCls = 'x-report-cell intcolor', field.renderer = Jfok.system.intRenderer;
			field.align = 'center';
			field.xtype = 'numbercolumn';
			field.format = '#';
			gfd.fieldType = 'Integer';
		} else if (gfd.aggregateType == 'avg') {
			field.dataIndex = 'A_' + field.dataIndex;
			field.text += '均值';
		} else if (gfd.aggregateType == 'max') {
			field.dataIndex = 'X_' + field.dataIndex;
			field.text += '最大值';
		} else if (gfd.aggregateType == 'min') {
			field.dataIndex = 'N_' + field.dataIndex;
			field.text += '最小值';
		} else
			field.filter = {
				updateBuffer : 1000,
				dateFormat : 'Y-m-d'
			};

		if (fd.manytoone_TitleName) {
			var pmodule = Jfok.modules.getModuleInfoWithName(fd.tf_fieldType);
			var icon = '';
			if (pmodule && pmodule.iconURL)
				icon = '<img src="' + pmodule.iconURL + '" />';
			Ext.apply(field, {
						renderer : Jfok.system.manytoOneFieldRenderer,
						simpleText : fd.tf_title,
						text : '<span class="gridheadicon" >' + icon + fd.tf_title
								+ '</span>',
						manytooneIdName : fd.manytoone_IdName,
						moduleName : fd.tf_fieldType
					})
		}
		field.text = field.text.replace(new RegExp('--', 'gm'), '<br/>');

		return field;
	},

	// 模块的名称字段，点击可以显示此模块的 display form
	nameFieldRenderer : function(val, rd, model, row, col, store, gridview) {
		var result = val;
		try {
			if (model.getIdValue())
				result = '<span class="gridNameField">'
						+ '<a onclick="javascript:__smr(\'' + model.module.tf_moduleName
						+ '\',\'' + model.getIdValue() + '\');return false;" href="#">'
						+ filterTextSetBk(store, val) + '</a></span>';
			else
				result = filterTextSetBk(store, val);
		} catch (err) {
		}
		return result;
	},

	/**
	 * 取得选中的记录条数
	 * 
	 * @return {}
	 */
	getSelectionCount : function() {
		return this.getSelectionModel().getSelection().length;
	}

})